package itheima.chap05;

public class TypeCastDemo {
    public static void main(String[] args) {
        // 1.自动类型转换
        // 数值范围小的类型的变量，可以直接赋值给数值大的范围的变量，实现自动类型转换，反之则不然
        // byte -> short -> int -> long -> float -> double
        byte x = 127;
        int y = x;
        System.out.println(y);

        // 2.强制类型转换
        int i = 1030; //0100 0000 0110   1030的二进制是
        byte j = (byte) i;//0000 0110
        System.out.println(j);//6

        // 拓展：赋值运算符（隐藏强制运算）
        byte a = 10;
        a += 10; //a = (byte)(a + 10);
        System.out.println(a);
        // 所以也容易出错： byte的范围是[-128,127]，如果超过这个范围，就会自动转为int类型，再进行运算，再转为byte类型，所以会丢失数据
        byte b = 10;
        b += 1025; //1035，1025二进制为100000001，超出了byte的范围，所以会自动转为int类型，再进行运算，得1035，二进制10000001011，取低 8 位：00001011，再转为byte类型，所以b的值为11
        System.out.println(b); //11
    }
}
